#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 500, M = 500;
int n, m;
ll a[N + 5], a1[N + 5], c[N + 5], X[5], tot;
bool d[10][N + 5];


int main() {
    freopen("arena.in", "r", stdin);
    freopen("arena.out", "w", stdout);
    cin >> n >> m;
    for(int i = 1; i <= n; i++) {
        cin >> a1[i];
    }
    for(int i = 1; i <= m; i++) {
        cin >> c[i];
    }
    int K = __lg(n) + 1;
    for(int i = 1; i <= K; i++) {
        string s;
        cin >> s;
        for(int j = 0; j < s.size(); j++) {
            d[i][j + 1] = (bool)(s[i] - '0');
        }
    }
    int t;
    cin >> t;
    while(t--) {
        for(int i = 0; i < 4; i++) {
            cin >> X[i];
        }
        ll ans = 0;
        for(int l = 1; l <= m; l++) {
            for(int i = 1; i <= n; i++) {
                a[i] = a1[i] ^ X[i % 4];
            }
            for(int i = 1; i <= __lg(c[l]); i++) {
                tot = 0;
                for(int j = 1; j <= c[l] / (1 << (i - 1)); j += 2) {
                    if(a[j + d[i][(j + 1) >> 1]] >= i) {
                        a[++tot] = a[j + d[i][(j + 1) >> 1]];
                    } else {
                        a[++tot] = a[j + (1 - d[i][(j + 1) >> 1])];
                    }
                }
            }
            if(l == 1) ans = l * a[1];
            else ans = ans ^ (l * a[1]);
        }
        cout << ans << endl;
    }
    return 0;
}